//判断一棵树是不是这棵树的子树：首先判断这两个树是否相同
//其次判断root.left和root.right是不是相同，不相同继续递归
//怎么判断相同：三种情况：1.同为null 2.一个null，一个非null 3.两个非null，但是val不相等(相等递归继续判断两个树的左右结点）
public class demo {
    public boolean isSametree(TreeNode root, TreeNode subRoot) {
        //两个结点都是null
        if(root == null && subRoot == null)
            return true;
        //两个结点一个null，一个不是null
        if(root == null && subRoot != null ||root != null &&subRoot == null)
            return false;
        //两个结点都不是null，但是val不相等
        if(root.val != subRoot.val)
            return false;
        //上面最开始都在判断根节点，递归继续判断子树结点
        return isSametree(root.left,subRoot.left)&&isSametree(root.right,subRoot.right);
    }
    public boolean isSubtree(TreeNode root, TreeNode subRoot) {
        if(root == null) {
            return false;
        }
        //两个同样的树
        if(isSametree(root,subRoot)) {
            return true;
        }
        //如果第二个子结点不是一样的，还得继续向下找（再次进行递归）
        if(isSubtree(root.left,subRoot)) {
            return true;
        }
        if(isSubtree(root.right,subRoot)){
            return true;
        }
        return false;
    }
}
